<?php

declare(strict_types=1);

namespace xpzhu\Jwt\Facade;

/**
 * @see \xpzhu\Jwt\JwtAuth
 * @mixin \xpzhu\Jwt\JwtAuth
 * @method static token($id, array $claims) 生成Token
 * @method static verify(string $token = '') 检测Token合法性
 * @method static refresh() 刷新Token 返回新Token
 * @method static logout(string $token = '') 注销Token
 * @method static getClaims() 获取验证后的Token对象
 * @method static getClaim($name) 获取验证后的Claims
 * @method static getConfig() 获取 Token 配置
 * @method static destroyStoreWhitelist(string $store = '') 注销指定应用下缓存的用户 （强制下线 重新登录）
 * @method static destroyToken($id, string $store = '') 注销指定某个用户（强制下线 重新登录）
 */
class JwtAuth
{
    protected static array $_instance = [];

    public static function instance(string $app = '')
    {
        if (empty($app)) {
            $app = request()->app === '' ? 'default' : request()->app;
        }

        if (!isset(static::$_instance[$app])) {
            static::$_instance[$app] = new \xpzhu\Jwt\JwtAuth($app);
        }
        return static::$_instance[$app];
    }

    /**
     * @param $name
     * @param $arguments
     * @return mixed
     */
    public static function __callStatic($name, $arguments)
    {
        return static::instance()->{$name}(... $arguments);
    }
}